/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Source;

import com.mysql.jdbc.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
/**
 *
 * @author JRN
 */
public class Pedido_DAO implements DAO{

     private String sentenciaSQL;
    ConexionDB conexion;
    LinkedList<Pedido_POJO> listaDetalle = new LinkedList<Pedido_POJO>();
    ResultSet resultado;

    private String temp;
    
    public Pedido_DAO() {

        conexion = new ConexionDB();
    }

     //Estructura Pedido
        //idPedido int PRIMARY KEY,
        //statusOrden varchar(45),
        //fechaIngreso timestamp,
        //descripcion varchar(100),
        //fechaPago timestamp,
        //statusPago boolean,
        //idUsuario int REFERENCES Usuario(idUsuario),
        //idShipping int REFERENCES Shipping(idShipping)

    /**
     * Retorna el pedido especificado
     * @param pIdPedido id del pedido que se desea
     * @return retorna un LinkedList< Pedido_Pojo >
     */
    public LinkedList<Pedido_POJO> obtenerReg(int id) throws SQLException {



        conexion.abrirConexion();
        temp="SELECT * FROM Pedido WHERE idPedido=?";
        PreparedStatement ps=conexion.prepareStatement(temp);
        ps.setInt(1,id);
        //sentenciaSQL = "SELECT * FROM Pedido WHERE idPedido=" + id;

        try {
            //resultado = conexion.getResultSet(sentenciaSQL);
            resultado=ps.executeQuery();

            if (resultado.next()) {
                Pedido_POJO objPedido = new Pedido_POJO();

                objPedido.setIdPedido(Integer.parseInt(resultado.getString("idPedido")));
                objPedido.setStatusOrden(resultado.getString("statusOrden"));
                objPedido.setFechaIngreso(resultado.getString("fechaIngreso"));
                objPedido.setDescripcion(resultado.getString("descripcion"));
                objPedido.setFechaPago(resultado.getString("fechaPago"));
                objPedido.setStatusPago(Boolean.parseBoolean(resultado.getString("statusPago")));
                objPedido.setIdUsuario(Integer.parseInt(resultado.getString("idUsuario")));
                objPedido.setIdShipping(Integer.parseInt(resultado.getString("idShipping")));

                listaDetalle.add(objPedido);


            }

        } catch (Exception ex) {
            System.out.println("error " + ex);
            
            conexion.cerrarConexion();
            return null;
        }
        ps.close();
        conexion.cerrarConexion();
        return listaDetalle;
    }

    /**
     * Retorna todos los pedidos de un usuario
     * @param idUsuario id del usuario el cual se quiere obtener sus pedidos
     * @return retorna un LinkedList< Pedido_Pojo >
     */
    public LinkedList<Pedido_POJO> obtenerPedidosUsuario(int idUsuario) throws SQLException {
    conexion.abrirConexion();
        
    temp="SELECT * FROM Pedido WHERE idUsuario=?";
    PreparedStatement ps=conexion.prepareStatement(temp);
    ps.setInt(1, idUsuario);
    //sentenciaSQL = "SELECT * FROM Pedido WHERE idUsuario=" + idUsuario;

        try {
            //resultado = conexion.getResultSet(sentenciaSQL);
            resultado=ps.executeQuery();
            if (resultado.next()) {
                Pedido_POJO objPedido = new Pedido_POJO();

                objPedido.setIdPedido(Integer.parseInt(resultado.getString("idPedido")));
                objPedido.setStatusOrden(resultado.getString("statusOrden"));
                objPedido.setFechaIngreso(resultado.getString("fechaIngreso"));
                objPedido.setDescripcion(resultado.getString("descripcion"));
                objPedido.setFechaPago(resultado.getString("fechaPago"));
                objPedido.setStatusPago(Boolean.parseBoolean(resultado.getString("statusPago")));
                objPedido.setIdUsuario(Integer.parseInt(resultado.getString("idUsuario")));
                objPedido.setIdShipping(Integer.parseInt(resultado.getString("idShipping")));

                listaDetalle.add(objPedido);


            }

        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return null;
        }
        ps.close();
        conexion.cerrarConexion();
        return listaDetalle;
    }




    public int guardarReg(String statusOrden, String fechaIngreso, String descripcion, String fechaPago, boolean statusPago, int idUsuario, int idShipping) throws SQLException {
        
    conexion.abrirConexion();
    
    temp="INSERT INTO Pedido (statusOrden,fechaIngreso,descripcion,fechaPago,statusPago,idUsuario,idShipping) VALUES (?,?,?,?,?,?,?)";
     /*   sentenciaSQL = "INSERT INTO Pedido(statusOrden,fechaIngreso,descripcion,fechaPago,statusPago,idUsuario,idShipping) VALUES ('"
                          + statusOrden + "','" + fechaIngreso + "','" + descripcion + "','"+fechaPago+"',"+statusPago+","+idUsuario+","+idShipping+")";
*/
    PreparedStatement ps=conexion.prepareStatement(temp);
    ps.setString(1,statusOrden);
    ps.setString(2, fechaIngreso);
    ps.setString(3,descripcion);
    ps.setString(4, fechaPago);
    ps.setBoolean(5, statusPago);
    ps.setInt(6, idUsuario);
    ps.setInt(7, idShipping);
        try {
            //int ret =  conexion.executeQuery(sentenciaSQL);
            int ret =  ps.executeUpdate();
            ps.close();
            conexion.cerrarConexion();
            return ret;


        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return -1;
        }

    }


    
    public int actualizarReg(int idPedido, String statusOrden, String fechaIngreso, String descripcion, String fechaPago, boolean statusPago, int idUsuario, int idShipping) throws SQLException {
    conexion.abrirConexion();
    temp="UPDATE Pedido SET statusOrden=?,fechaIngreso=?,descripcion=?,fechaPago=?, statusPAgo=?,idUsuario=?,idShipping=? WHERE idPedido=?";    
    /*
    sentenciaSQL = "UPDATE Pedido SET "
                    + "statusOrden = '"+statusOrden+"',"
                    + "fechaIngreso = '"+fechaIngreso+"',"
                    + "descripcion = '"+descripcion+"',"
                    + "fechaPago = '"+fechaPago+"',"
                    + "statusPago = "+statusPago+","
                    + "idUsuario = "+idUsuario+","
                    + "idShipping = "+idShipping
                    + "  WHERE idPedido = " + idPedido;

*/
    
    PreparedStatement ps=conexion.prepareStatement();
    ps.setString(1, statusOrden);
    ps.setString(2, fechaIngreso);
    ps.setString(3, descripcion);
    ps.setString(4, fechaPago);
    ps.setBoolean(5, statusPago);
    ps.setInt(6,idUsuario);
    ps.setInt(7,idShipping);
    ps.setInt(8, idPedido);
        try {
            //int ret = conexion.executeQuery(sentenciaSQL);
            int ret=ps.executeUpdate();
            ps.close();
            conexion.cerrarConexion();
            return ret;

        } catch (Exception ex) {
            System.out.println("error " + ex);
            ps.close();
            conexion.cerrarConexion();
            return -1;
        }
    }






     public int eliminarReg (int id) throws SQLException{
     conexion.abrirConexion();
     temp="DELETE FROM Pedido WHERE idPedido=?";
        //sentenciaSQL = "DELETE FROM Pedido WHERE idPedido="+id;

     PreparedStatement ps=conexion.prepareStatement(temp);
     ps.setInt(1, id);
     
        try {
            //int ret = conexion.executeQuery(sentenciaSQL);
            int ret=ps.executeUpdate();
            ps.close();
            conexion.cerrarConexion();
            return ret;

        } catch (Exception ex) {
            ps.close();
            conexion.cerrarConexion();
            System.out.println("error " + ex);
            return -1;
        }

    }




      /**
     * Retorna todos los pedidos con su detalle de articulos de un usuario
     * @param idUsuario id del usuario el cual se quiere obtener sus pedidos
     * @return retorna un ResultSet con los campos statusOrden, fechaIngreso, descripcion, fechaPago,
       * statusPago, cantidad, descuento , Articulo"
     */
    public ResultSet obtenerPedidoDetalleUsuario(int idUsuario) throws SQLException {
    conexion.abrirConexion();
    
    
        temp = "SELECT p.statusOrden,p.fechaIngreso, p.descripcion, p.fechaPago, p.statusPago, d.cantidad, d.descuento , a.nombre AS Articulo"
                + " FROM Pedido p, Detalle d, Articulo a "
                + " WHERE p.idPedido = d.Pedido_idPedido "
                + " AND d.Articulo_idArticulo = a.idArticulo "
                + " AND p.Usuario_idUsuario=?";
        PreparedStatement ps=conexion.prepareStatement(temp);
        ps.setInt(1, idUsuario);
        try {
            resultado=ps.executeQuery();
            ps.close();
            //resultado = conexion.getResultSet(sentenciaSQL);

        } catch (Exception ex) {
            System.out.println("error " + ex);
            ps.close();
            conexion.cerrarConexion();
            return null;
        }
        conexion.cerrarConexion();
        return resultado;
    }





}
